function [Z]=my_spten_symmetry(X)
% MY_SPTEN_SYMMETRY 函数用于提取三维稀疏张量的对称部分。
% Z = MY_SPTEN_SYMMETRY(X) 返回输入稀疏张量 X 的对称部分 Z。
% 如果没有输入参数 X，则创建一个随机的大小为 [10 10 10]，非零元素数量为 10 的三维稀疏张量。

if nargin < 1
   X = sptenrand([10 10 10], 10); % 创建一个随机的三维稀疏张量
end

% 将稀疏张量 X 投影到第二维和第三维，得到两个稀疏矩阵 A 和 B
A = sptenmat(X, 2); 
B = sptenmat(X, 3);

% 将稀疏矩阵 A 和 B 转换为密集矩阵，并求其对称部分的平均值
A1 = double(A);
B1 = double(B);
C = (A1 + B1) / 2;

% 提取对称部分中非零元素的行列坐标和值
[rows, cols] = find(C);
values = nonzeros(C);

% 构造一个新的稀疏张量 Y，表示对称部分
Y = sptenmat([rows, cols], values, A.rdims, A.cdims, A.tsize);

% 根据稀疏张量 Y 构造对称稀疏张量 Z
Z = sptensor(Y);
end
